#include "Tangenta.h"
#include "Putere.h"
#include "Cos.h"
#include "Sin.h"
#include "Minus.h"
#include "Impartit.h"

long double Tangenta::calcul(long double aux1)
{
    return Impartit::calcul(Sin::calcul(aux1), Cos::calcul(aux1));
}

long double Tangenta::calcul()
{
    if (!fStang)
        exit(1);

    return calcul(fStang->calcul());
}

char *Tangenta::derivare()
{
    char *aux1, *aux2, *aux, *aux00, *aux01;

    if (!fStang)
        exit(1);

    aux1 = fStang->derivare();
    aux2 = fStang->toString();
    aux00 = Cos::concatTermeni(aux2);
    aux01 = Putere::concatTermeni(aux00,(char*) "2");
    aux = Impartit::concatTermeni(aux1, aux01);

    delete aux1; delete aux2; delete aux00; delete aux01;
    return aux;
}

long double Tangenta::calculDerivata()
{
    if (!fStang)
        exit(1);

    return fStang->calculDerivata() * powl(cosl(fStang->calcul()), 0.5);
}

char *Tangenta::toString()
{
    char *aux, *aux1;
    int nrP;

    if (!fStang)
        exit(1);
    aux1 = fStang->toString();

    aux = concatTermeni(aux1);
    delete aux1;

    return aux;
}

char *Tangenta::concatTermeni(char *aux1)
{
    char *aux;
    int nrP;

    nrP = aux1[0] == '(' ? 0 : 2;
    aux = new char[strlen(aux1) + 4 + nrP];

    strcpy(aux, "tan");
    if (nrP) strcat(aux, "(");
    strcat(aux, aux1);
    if (nrP) strcat(aux, ")");

    return aux;
}
